package ServidorDistribuido;

import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;

//ChatThread
class HiloMulticastLectura extends Thread {
    private MulticastSocket msocket;
    private DatagramPacket recv;

    public HiloMulticastLectura(MulticastSocket msock, InetAddress group_no, int Port_no){
            msocket= msock;
    }

    @Override
    public void run(){
        System.out.println("\nHEM: Comenzo el Hilo de lectura Multicast.");
        HiloTimeUp temporizador = new HiloTimeUp();
        Thread hiloTemporizador = new Thread(temporizador);
        hiloTemporizador.start();
        byte [] buf = new byte[1000];
        String tmp;
        try{
            while(Servidor.matarHilos){
               // Maneja la data que va entrando y la imprime en pantalla
               recv = new DatagramPacket(buf, buf.length);
               msocket.receive(recv);
               tmp = new String(recv.getData(), 0, recv.getLength());
               HiloTimeUp.pararTemporizador = false;
//               System.out.println(">>tmp = " + tmp);
               tmp = tmp.split("[/]")[1];
               InetAddress ipRecibida = InetAddress.getByName(tmp);
               System.out.println("HML: Coordinador envio por multicast: " + tmp);
               if(!ipRecibida.equals(Servidor.ipServidorCoord)){
                   Servidor.ipServidorCoord = ipRecibida;
                   System.out.println("\n\nHML: Hubo un cambio en la ip del coordinador. ");
                   System.out.println("HML: miIp: " + Servidor.miIp + " ipRecibida: " + ipRecibida);
                   if(ipRecibida.equals(Servidor.miIp)){
                        Servidor.esCoordinador = true;
                        System.out.println("\nHe sido designado como nuevo coordinador.");
                   }
               }
            }
        } catch (IOException e) {
                System.out.println("\nHML: ERROR");
                e.printStackTrace();
        } finally {
            try {
                Servidor.msock.leaveGroup(Servidor.group);
                Servidor.msock.close();
                Servidor.socketCliente.close();
                Servidor.servidorCreado = false;
                System.out.println("\nHML: Termino el Hilo Multicast Lectura. ");
                System.out.println("\nTermino el Hilo Multicast Lectura");
            } catch (IOException ex) {
                System.out.println("\nERROR en el Hilo Multicast Lectura");
                Logger.getLogger(HiloMulticastEscritura.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}